home *** CD-ROM | disk | FTP | other *** search
- /*********************************************************
- "menu.c"
-
- by John A. Love, III [ Washington Apple Pi Users' Group]
-
- using Symantec's "THINK C", v 5.00
- *********************************************************/
-
-
- #include <Balloons.h>
-
- #include "protos"
-
- #include "globals.h"
- #include "extern.h"
-
- #include "floatingWindow.h"
-
-
-
-
- Boolean currEdit = true;
- extern DialogPtr helpPtr;
-
-
-
- void SetUpMainMenus (void) {
-
- short none = 0;
-
-
- gAppleMenu = GetMenu(AppleMenuID);
- if (!gSys7) {
- SetItemIcon(gAppleMenu, AboutItem, none);
- SetItemCmd(gAppleMenu, AboutItem, (char)none);
- }
- InsertMenu(gAppleMenu, 0);
- AddResMenu(gAppleMenu, 'DRVR'); /* + DAs */
- ;
- gFileMenu = GetMenu(FileMenuID);
- InsertMenu(gFileMenu, 0);
- ;
- gEditMenu = GetMenu(EditMenuID);
- InsertMenu(gEditMenu, 0);
-
- gHelpMenu = nil;
- if (HelpManagerActive())
- if (HMGetHelpMenuHandle(&gHelpMenu) == noErr)
- if (gHelpMenu != nil) {
- gOrigNumHelpItems = CountMItems(gHelpMenu);
- AppendMenu(gHelpMenu, "\pAbout my application ...");
- }
-
- DrawMenuBar();
-
- } /* SetUpMainMenus */
-
-
-
- /* ------------------------------------------------------------
- ** HandleMenu is the dispatch routine for the main MenuBar.
- ** The item selected is passed to the appropriate menu handler.
- ** ------------------------------------------------------------ */
-
- void HandleMenu (EventRecord *event) {
-
- long menuCode;
- char charCode;
- long finalTicks;
-
-
- if (event->what == mouseDown) menuCode = MenuSelect(event->where);
- else {
- charCode = event->message & charCodeMask;
- menuCode = MenuKey(charCode);
- } /* else */
-
- switch (HiWord(menuCode)) {
-
- case AppleMenuID:
- DoApple(LoWord(menuCode));
- break;
-
- case FileMenuID:
- DoFile(LoWord(menuCode));
- break;
-
- case EditMenuID:
- DoEdit(LoWord(menuCode));
- break;
-
- case kHMHelpMenuID:
- if (LoWord(menuCode) == gOrigNumHelpItems + 1)
- /* User selected my Item which I appended in "SetupMainMenus" PROC. */
- DoApple(AboutItem);
- break;
-
- default:
- if (event->what == keyDown) {
- SysBeep(10);
- break;
- }
-
- } /* end switch */
-
- if (event->what == keyDown) Delay(10, &finalTicks); // Do NOT ask ?!*!?
- HiliteMenu(0);
-
- } /* HandleMenu */
-
-
-
- /* ----------------------------------------------
- ** DoApple is the code for the main "Apple" Menu.
- ** The other two main Menus follow.
- ** ---------------------------------------------- */
-
- void DoApple (short item) {
-
- GrafPtr oldPort;
- Str255 accName;
- short accNumber;
-
-
- switch (item) {
-
- case AboutItem:
- if (helpPtr /* != nil */) {
- if (! ((WindowPeek)helpPtr)->hilited) TSelectWindow(helpPtr);
- // else already up front.
- }
- else Create_Help();
- break;
-
- case AdisabledItem:
- break; // NEVER seen -- shown for completeness, only.
-
- default:
- GetPort(&oldPort);
- ;
- GetItem(gAppleMenu, item, accName);
- accNumber = OpenDeskAcc(accName);
- ;
- SetPort(oldPort);
- break;
-
- } /* end switch */
-
- } /* DoApple */
-
-
-
- void DoFile (short item) {
-
-
- switch (item) {
-
- case QuitItem:
- DoQuit();
- break;
-
- default:
- break;
-
- } /* end switch */
-
- } /* DoFile */
-
-
-
- void DoEdit (short item) {
-
-
- if (SystemEdit(item - 1)) return; /* DAs do their own thing !! */
-
- switch (item) {
-
- case UndoItem:
- case EdisabledItem:
- case CutItem:
- case CopyItem:
- case PasteItem:
- case ClearItem:
- break;
-
- } /* end switch */
-
- } /* DoEdit */
-
-
-
- /* ----------
- ** Bye-Bye !!
- ** ---------- */
-
- void DoQuit (void) {
-
-
- gDone = true;
- ;
- Kill_Help_Window();
- DoCloseAll();
- /* For HandleCursor() ... BUT it appears DoPeriodic() is
- ** called anyway after DoCloseAll(). DoPeriodic() calls
- ** PeriodicWindows() which will set gFW to NIL because
- ** there are now NO windows. */
- gFW = nil;
- HandleCursor(); /* Get rid of color CRSR if needed. */
-
- } /* DoQuit */
-
-
-
-
- /* { end file "menu.c" } */
-